package br.com.fatecmc.persephone.gestaoPropriedade.core.dao.impl;

import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Collection;
import java.util.logging.Level;
import java.util.logging.Logger;

import br.com.fatecmc.core.dao.AbstractDAO;
import br.com.fatecmc.fatec.domain.Entidade;
import br.com.fatecmc.persephone.gestaopropriedade.domain.*;




public class DAOGestaoPropriedade extends AbstractDAO {

	@Override
	public void salvar(Entidade obj) throws IllegalArgumentException {
		try {
			br.com.fatecmc.persephone.gestaopropriedade.domain.GestaoPropriedade gestao = (GestaoPropriedade) obj;
			conexao.getConexao().createStatement(); 
	        String sql =  "INSERT INTO tb_propriedades_gestao_propriedade ( id_propriedade, registra_vol_producao_flg, registro_controle_vacinas_flg, possui_caderneta_campo_flg," +
	        		"utiliza_dados_meteorologicos_flg, assist_administ_profissional_flg, embala_produto_flg, identifica_lotes_flg, faz_rotulagem_flg, identifica_talhoes_prod_flg )" +
	        			   "VALUES(?,?,?,?,?,?,?,?,?,?)";
	        PreparedStatement pstm = conexao.getConexao().prepareStatement(sql);
	        pstm.setInt(1, gestao.getId());
	        pstm.setBoolean(2, gestao.getRegistraVolProducao());
	        pstm.setBoolean(3, gestao.getRegistroControleVacinas());
	        pstm.setBoolean(4, gestao.getPossuiCadernetaCampo());
	        pstm.setBoolean(5, gestao.getUtilizaDadosMeteorologia());
	        pstm.setBoolean(6, gestao.getAssistAdministProfissional());
	        pstm.setBoolean(7, gestao.getEmbalaProduto());
	        pstm.setBoolean(8, gestao.getIdentificaLotes());
	        pstm.setBoolean(9, gestao.getFazRotulagem());
	        pstm.setBoolean(10, gestao.getIdentificaTalhoesProd());
	        pstm.executeUpdate();
	        pstm.close();
	        conexao.getConexao().close();
		} catch (Exception e) {
			Logger.getLogger(DAOGestaoPropriedade.class.getName()).log(Level.SEVERE, null, e);
		}
		
	}

	@Override
	public Entidade alterar(Entidade obj) {
		try {
			GestaoPropriedade gestao = (GestaoPropriedade) obj;
			conexao.getConexao().createStatement(); 
	        String sql =  "update tb_propriedades_gestao_propriedade set registra_vol_producao_flg = ?, registro_controle_vacinas_flg = ?, possui_caderneta_campo_flg= ?," +
	        		"utiliza_dados_meteorologicos_flg = ?, assist_administ_profissional_flg = ?, embala_produto_flg = ?, identifica_lotes_flg= ?, faz_rotulagem_flg = ?, identifica_talhoes_prod_flg = ? " +
	        			   " where id_propriedade = ? ";
	        PreparedStatement pstm = conexao.getConexao().prepareStatement(sql);
	        pstm.setInt(10, gestao.getId());
	        pstm.setBoolean(1, gestao.getRegistraVolProducao());
	        pstm.setBoolean(2, gestao.getRegistroControleVacinas());
	        pstm.setBoolean(3, gestao.getPossuiCadernetaCampo());
	        pstm.setBoolean(4, gestao.getUtilizaDadosMeteorologia());
	        pstm.setBoolean(5, gestao.getAssistAdministProfissional());
	        pstm.setBoolean(6, gestao.getEmbalaProduto());
	        pstm.setBoolean(7, gestao.getIdentificaLotes());
	        pstm.setBoolean(8, gestao.getFazRotulagem());
	        pstm.setBoolean(9, gestao.getIdentificaTalhoesProd());
	        pstm.executeUpdate();
	        pstm.close();
	        conexao.getConexao().close();
	        return gestao;
		} catch (Exception e) {
			Logger.getLogger(DAOGestaoPropriedade.class.getName()).log(Level.SEVERE, null, e);
			return null;
		}
	}

	@Override
	public boolean excluir(Entidade obj) {
		 try {
			 	GestaoPropriedade gestao = (GestaoPropriedade) obj;
	            conexao.getConexao().createStatement(); 
	            String sql =  "delete from tb_propriedades_gestao_propriedade where id_propriedade = ? ";
	            PreparedStatement pstm = conexao.getConexao().prepareStatement(sql);
	            pstm.setInt(1 , gestao.getId());
	            pstm.executeUpdate();
	            conexao.getConexao().close();
	            pstm.close();
	            return true;
	        } catch (SQLException ex) {
	            Logger.getLogger(DAOGestaoPropriedade.class.getName()).log(Level.SEVERE, null, ex);
	            return false;
	        }
	}

	@Override
	public Collection consultar(Entidade obj) {
		  try {
	            GestaoPropriedade gestao = (GestaoPropriedade) obj;
	            String sql ="";
	            PreparedStatement pstm;
	            conexao.getConexao().createStatement();
	           
	            sql = "SELECT * from tb_propriedades_gestao_propriedade where id_propriedade = ?";
	            pstm = conexao.getConexao().prepareStatement(sql);
	            pstm.setInt(1 , gestao.getId());
	            
	            
	            
	            ResultSet rs = pstm.executeQuery();
	            ArrayList<Entidade> lista = new ArrayList<Entidade>();
	            while (rs.next()) {     
	            	GestaoPropriedade gpro = new GestaoPropriedade();
	            	            	
	            	gpro.setId(rs.getInt("id_propriedade"));  
	            	gpro.setAssistAdministProfissional(rs.getBoolean("assist_administ_profissional_flg"));
	            	gpro.setEmbalaProduto(rs.getBoolean("embala_produto_flg"));
	            	gpro.setFazRotulagem(rs.getBoolean("faz_rotulagem_flg"));
	            	gpro.setIdentificaLotes(rs.getBoolean("identifica_lotes_flg"));
	                gpro.setIdentificaTalhoesProd(rs.getBoolean("identifica_talhoes_prod_flg"));
	                gpro.setPossuiCadernetaCampo(rs.getBoolean("possui_caderneta_campo_flg"));
	                gpro.setRegistraVolProducao(rs.getBoolean("registra_vol_producao_flg"));
	                gpro.setRegistroControleVacinas(rs.getBoolean("registro_controle_vacinas_flg"));
	                gpro.setUtilizaDadosMeteorologia(rs.getBoolean("utiliza_dados_meteorologicos_flg"));
	            	
	            	
	            	
	            	lista.add(gpro);
	                
	                
	            }  
	            conexao.getConexao().close();
	            pstm.close();
	            return lista;
	        } catch (SQLException ex) {
	            Logger.getLogger(DAOGestaoPropriedade.class.getName()).log(Level.SEVERE, null, ex);
	            return null;
	        }
	}

}
